package com.example.jingleai.controller;

import com.example.jingleai.entity.vo.MessageVo;
import com.example.jingleai.repository.ChatHistoryRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

// @RequiredArgsConstructor 注解，用于自动注入ChatHistoryRepository实例。
@RequiredArgsConstructor
@RestController
@RequestMapping("/ai/history")
public class ChatHistoryController {
    // 自动注入的ChatHistoryRepository实例，用于操作聊天历史数据。
    private final ChatHistoryRepository chatHistoryRepository;

    private final ChatMemory chatMemory;

    /**
     * 根据指定的类型获取聊天ID列表。
     *
     * @param type 聊天类型，例如"customer"或"agent"。
     * @return 包含指定类型聊天ID的对象。
     */
    @GetMapping("/{type}")
    public Object getChatIds(@PathVariable("type") String type) {
        // 调用ChatHistoryRepository的getChatIds方法获取聊天ID列表。
        return chatHistoryRepository.getChatIds(type);
    }

    /**
     * 根据指定的类型和聊天ID获取聊天历史记录。
     *
     * @param type   聊天类型，例如"customer"或"agent"。
     * @param chatId 聊天ID，用于标识具体的聊天会话。
     * @return 包含指定聊天ID的聊天历史记录的消息视图对象列表。
     */
    @GetMapping("/{type}/{chatId}")
    public List<MessageVo> getChatHistory(@PathVariable("type") String type, @PathVariable("chatId") String chatId) {
        // 调用ChatMemory的get方法获取聊天历史记录。
        List<Message> messages = chatMemory.get(chatId, Integer.MAX_VALUE);
        // 将Message对象列表转换为MessageVo对象列表并返回。
        return messages.stream().map(MessageVo::new).toList();
    }
}